package com.limetalks.util;

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailSender {
	
	private static final String SMTP_HOST_NAME = "smtp.gmail.com";
	private static final String SMTP_PORT = "465";
	private static final String emailMsgTxt = "Test Message Contents";
	private static final String emailSubjectTxt = "A test from gmail";
	private static final String emailFromAddress = "vladimirstal@gmail.com";
	private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
	private static final String[] sendTo = {"sleepingout@mail.ru"};
	
	public static void main(String[] args) throws Exception {
		
		//Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

		new MailSender().sendSSLMessage(sendTo, emailFromAddress, emailSubjectTxt, emailMsgTxt);
		//new MailSender().sendRegEmail("sleepingout@mail.ru", "123");
		System.out.println("Sucessfully Sent mail to All Users");
	}
	
	public void sendRegEmail(String sendTo, String code) throws MessagingException {
		
		String recipients[] = new String[1];
		recipients[0] = sendTo;
		String message = "http://93.84.121.112:8080/LT/Register?code=" + code;
		sendSSLMessage(recipients, emailFromAddress, "LimeTalk.com registration", message);
	}
	
	public void sendSSLMessage(String recipients[], String from, String subject, String message) throws MessagingException {
			
			boolean debug = true;

			Properties props = new Properties();
			props.put("mail.transport.protocol", "smtps");
			props.put("mail.smtp.host", SMTP_HOST_NAME);
			props.put("mail.smtp.auth", "true");
			props.put("mail.debug", "true");
			props.put("mail.smtp.port", SMTP_PORT);
			props.put("mail.smtp.socketFactory.port", SMTP_PORT);
			props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
			props.put("mail.smtp.socketFactory.fallback", "false");

			Session session = Session.getDefaultInstance(props,
				new javax.mail.Authenticator() {
					protected PasswordAuthentication getPasswordAuthentication() {
						return new PasswordAuthentication("vladimirstal@gmail.com", "aries111");
					}
				}
			);
			
			session.setDebug(debug);

			Message msg = new MimeMessage(session);
			InternetAddress addressFrom = new InternetAddress(from);
			msg.setFrom(addressFrom);

			InternetAddress[] addressTo = new InternetAddress[recipients.length];
			for (int i = 0; i < recipients.length; i++) {
				addressTo[i] = new InternetAddress(recipients[i]);
			}
			msg.setRecipients(Message.RecipientType.TO, addressTo);

			// Setting the Subject and Content Type
			msg.setSubject(subject);
			msg.setContent(message, "text/plain");
			Transport.send(msg);
		}
	
    public void test() throws Exception{
        Properties props = new Properties();

        //props.put("mail.transport.protocol", "smtps");
        props.put("mail.smtps.host", SMTP_HOST_NAME);
        props.put("mail.smtps.auth", "true");
        // props.put("mail.smtps.quitwait", "false");

        Session mailSession = Session.getDefaultInstance(props);
        mailSession.setDebug(true);
        Transport transport = mailSession.getTransport("pop3s");

        MimeMessage message = new MimeMessage(mailSession);
        message.setSubject("Testing SMTP-SSL");
        message.setContent("This is a test", "text/plain");

        message.addRecipient(Message.RecipientType.TO, new InternetAddress("elvis@presley.org"));
        
        transport.connect("smtp.gmail.com", "vladimirstal@gmail.com", "aries123");

        transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
        transport.close();
    }
}
